{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：调整树的参数：subsample 和 colsample_bytree\n",
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二轮参数调整得到的n_estimators最优值（285），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58812, std: 0.00379, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.58615, std: 0.00410, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.58441, std: 0.00312, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58379, std: 0.00341, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58294, std: 0.00348, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58211, std: 0.00301, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58750, std: 0.00393, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.58607, std: 0.00444, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58429, std: 0.00409, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58374, std: 0.00427, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58282, std: 0.00397, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58255, std: 0.00414, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.58754, std: 0.00410, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.58605, std: 0.00462, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.58468, std: 0.00386, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58375, std: 0.00375, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58277, std: 0.00354, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58220, std: 0.00334, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.58649, std: 0.00423, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.58554, std: 0.00362, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58380, std: 0.00350, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58310, std: 0.00397, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58192, std: 0.00376, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58201, std: 0.00391, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       " -0.58191513855895738)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=285,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=4, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 315.87531528,  365.94753518,  387.78774357,  397.21656742,\n",
       "         391.20799708,  397.30007825,  352.67217669,  395.39531555,\n",
       "         428.08635092,  438.0591866 ,  430.31025629,  432.39060049,\n",
       "         383.82227511,  430.75635877,  457.75998526,  478.17378693,\n",
       "         481.65250683,  482.80120034,  405.81725926,  470.5894412 ,\n",
       "         510.6107357 ,  513.14739432,  522.48111067,  511.64510183]),\n",
       " 'mean_score_time': array([ 1.0652009 ,  1.11745963,  0.95587749,  1.00072842,  0.90802369,\n",
       "         0.92702847,  1.06139693,  0.96428728,  0.98030539,  1.00673518,\n",
       "         0.88359623,  0.95347495,  0.98811402,  0.93505378,  0.91623325,\n",
       "         1.03176322,  1.00833669,  1.02195168,  0.98430877,  0.96588874,\n",
       "         0.9817071 ,  0.95307446,  0.94266276,  0.84014621]),\n",
       " 'mean_test_score': array([-0.58812247, -0.58614594, -0.58440927, -0.58379309, -0.58294309,\n",
       "        -0.58211032, -0.58749581, -0.58606781, -0.58429232, -0.5837441 ,\n",
       "        -0.58281977, -0.58255493, -0.58754229, -0.58605472, -0.58468488,\n",
       "        -0.58374943, -0.58277496, -0.58220457, -0.58649377, -0.58554401,\n",
       "        -0.58379955, -0.58310144, -0.58191514, -0.5820127 ]),\n",
       " 'mean_train_score': array([-0.49900557, -0.49627432, -0.4939815 , -0.49277695, -0.49227865,\n",
       "        -0.49330587, -0.49579736, -0.49209638, -0.49080865, -0.4900701 ,\n",
       "        -0.49066601, -0.49106346, -0.49347522, -0.4894151 , -0.4875286 ,\n",
       "        -0.48706906, -0.4872532 , -0.48839268, -0.49080507, -0.48714997,\n",
       "        -0.48582742, -0.48437815, -0.48502101, -0.48675047]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.8 0.8\n",
       "  0.9 0.9 0.9 0.9 0.9 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8\n",
       "  0.3 0.4 0.5 0.6 0.7 0.8],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([24, 20, 15, 12,  8,  3, 22, 19, 14, 10,  7,  5, 23, 18, 16, 11,  6,\n",
       "         4, 21, 17, 13,  9,  1,  2]),\n",
       " 'split0_test_score': array([-0.58268288, -0.57975379, -0.58014595, -0.57803569, -0.57672053,\n",
       "        -0.57699841, -0.58169124, -0.57841383, -0.57812746, -0.57686836,\n",
       "        -0.57614746, -0.57496092, -0.57999202, -0.57852957, -0.57806415,\n",
       "        -0.57737683, -0.57761509, -0.5765092 , -0.57909109, -0.57928665,\n",
       "        -0.57764741, -0.57639931, -0.5761199 , -0.57623355]),\n",
       " 'split0_train_score': array([-0.49934307, -0.49777022, -0.49532828, -0.49478711, -0.49301599,\n",
       "        -0.49472825, -0.49697109, -0.49440767, -0.49234257, -0.49115055,\n",
       "        -0.49121   , -0.49148902, -0.49443015, -0.4910167 , -0.48769091,\n",
       "        -0.48820176, -0.48841443, -0.48903338, -0.49261885, -0.4886329 ,\n",
       "        -0.48714817, -0.48372123, -0.48521425, -0.48613392]),\n",
       " 'split1_test_score': array([-0.58592043, -0.58399793, -0.58147736, -0.58209226, -0.58170622,\n",
       "        -0.58045603, -0.58474994, -0.58410848, -0.58251497, -0.58208871,\n",
       "        -0.58081412, -0.58195259, -0.58679778, -0.58429291, -0.58345365,\n",
       "        -0.58222364, -0.58040376, -0.58062934, -0.58503236, -0.58372965,\n",
       "        -0.58251441, -0.5823044 , -0.58011294, -0.57999366]),\n",
       " 'split1_train_score': array([-0.49967549, -0.49635377, -0.49431357, -0.49379862, -0.49265823,\n",
       "        -0.49273093, -0.49604371, -0.49246693, -0.49171994, -0.48851942,\n",
       "        -0.49049581, -0.49102856, -0.49331405, -0.49020642, -0.48786249,\n",
       "        -0.48690788, -0.48757786, -0.48845958, -0.49140088, -0.48751022,\n",
       "        -0.48706802, -0.48634725, -0.48473097, -0.48832236]),\n",
       " 'split2_test_score': array([-0.5879316 , -0.58606721, -0.58505198, -0.58486588, -0.58432365,\n",
       "        -0.58344415, -0.58864507, -0.5875529 , -0.58343215, -0.5839154 ,\n",
       "        -0.58398368, -0.58343849, -0.58890925, -0.58650015, -0.5853759 ,\n",
       "        -0.58459312, -0.58255092, -0.58339025, -0.58739148, -0.58754976,\n",
       "        -0.58520698, -0.58248279, -0.58135863, -0.58108402]),\n",
       " 'split2_train_score': array([-0.49924075, -0.49586722, -0.49323423, -0.49171031, -0.49242605,\n",
       "        -0.49379933, -0.49534887, -0.49255096, -0.49020562, -0.49019457,\n",
       "        -0.49039079, -0.49158118, -0.49384634, -0.48933227, -0.48804376,\n",
       "        -0.48705053, -0.48749692, -0.48790463, -0.48972317, -0.48738298,\n",
       "        -0.48468142, -0.48529305, -0.48545794, -0.48672182]),\n",
       " 'split3_test_score': array([-0.59020657, -0.59134712, -0.58760057, -0.5875736 , -0.58607035,\n",
       "        -0.58477476, -0.58930616, -0.58944128, -0.58751392, -0.58619929,\n",
       "        -0.58595833, -0.58596892, -0.59053736, -0.58849355, -0.58701855,\n",
       "        -0.58634639, -0.58629659, -0.58453385, -0.59023911, -0.58918455,\n",
       "        -0.58592503, -0.58727082, -0.58622308, -0.58647162]),\n",
       " 'split3_train_score': array([-0.49835445, -0.49707713, -0.49299546, -0.49154334, -0.49253116,\n",
       "        -0.49321484, -0.49609559, -0.49154506, -0.49005702, -0.49036653,\n",
       "        -0.49070582, -0.49055513, -0.494111  , -0.48873149, -0.48757632,\n",
       "        -0.48715586, -0.48702039, -0.48732478, -0.49056402, -0.48547879,\n",
       "        -0.48441175, -0.48287504, -0.48540334, -0.4866481 ]),\n",
       " 'split4_test_score': array([-0.59387259, -0.58956467, -0.58777151, -0.5863988 , -0.5858956 ,\n",
       "        -0.58487908, -0.59308832, -0.59082404, -0.5898748 , -0.58965054,\n",
       "        -0.58719661, -0.58645489, -0.59147625, -0.59245937, -0.5895136 ,\n",
       "        -0.58820851, -0.58700972, -0.58596138, -0.59071609, -0.58797018,\n",
       "        -0.58770511, -0.58705108, -0.58576231, -0.58628192]),\n",
       " 'split4_train_score': array([-0.49841409, -0.49430323, -0.49403597, -0.49204536, -0.49076182,\n",
       "        -0.49205599, -0.49452756, -0.48951128, -0.48971806, -0.49011942,\n",
       "        -0.49052766, -0.49066343, -0.49167458, -0.48778863, -0.48646955,\n",
       "        -0.48602928, -0.48575642, -0.48924102, -0.48971843, -0.48674498,\n",
       "        -0.48582774, -0.48365416, -0.48429854, -0.48592614]),\n",
       " 'std_fit_time': array([  6.71298461,   1.7373098 ,   0.94682168,   1.70618849,\n",
       "          1.58909759,   2.90960378,   1.43254936,   0.69512811,\n",
       "          2.04442036,   0.45614334,   8.18659062,   2.66402666,\n",
       "          2.27409603,   4.69748557,   3.50557118,   1.24030928,\n",
       "          1.19242184,   5.97328232,   2.57867865,   3.31971976,\n",
       "          7.14020493,   5.09896892,   1.96533153,  22.09482148]),\n",
       " 'std_score_time': array([ 0.10474729,  0.1261193 ,  0.02563644,  0.12605639,  0.02144376,\n",
       "         0.08486041,  0.06360224,  0.05190639,  0.09744775,  0.09239587,\n",
       "         0.02810724,  0.0838286 ,  0.04934252,  0.02818807,  0.02377105,\n",
       "         0.10378487,  0.11436069,  0.11311835,  0.08240551,  0.03766305,\n",
       "         0.06057496,  0.04987584,  0.06507153,  0.07445736]),\n",
       " 'std_test_score': array([ 0.00379147,  0.00410418,  0.00312005,  0.00341394,  0.00348293,\n",
       "         0.00301374,  0.00392689,  0.00444137,  0.00408516,  0.00426507,\n",
       "         0.00397249,  0.00413952,  0.00409576,  0.00462367,  0.00386232,\n",
       "         0.00374902,  0.00353922,  0.00334253,  0.00423313,  0.00362247,\n",
       "         0.00350004,  0.00397291,  0.00375503,  0.00391011]),\n",
       " 'std_train_score': array([ 0.0005276 ,  0.00117809,  0.0008316 ,  0.0012868 ,  0.00078409,\n",
       "         0.00091298,  0.00081741,  0.00159202,  0.00102969,  0.00085764,\n",
       "         0.0002903 ,  0.00041684,  0.00097181,  0.00112347,  0.00055264,\n",
       "         0.00069253,  0.00087267,  0.00070898,  0.00110038,  0.00103344,\n",
       "         0.00114899,  0.00125932,  0.00044284,  0.00084164])}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581915 using {'colsample_bytree': 0.9, 'subsample': 0.7}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21baf8cbdd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到最优的 subsample是在0.7，colsample_bytree是在0.9"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
